// 1560. 圆形赛道上经过次数最多的扇区
// 给你一个整数 n 和一个整数数组 rounds 。有一条圆形赛道由 n 个扇区组成，扇区编号从 1 到 n 。
// 现将在这条赛道上举办一场马拉松比赛，该马拉松全程由 m 个阶段组成。其中，第 i 个阶段将会从扇区 rounds[i - 1] 开始，
// 到扇区 rounds[i] 结束。举例来说，第 1 阶段从 rounds[0] 开始，到 rounds[1] 结束。
// 请你以数组形式返回经过次数最多的那几个扇区，按扇区编号 升序 排列。

// 注意，赛道按扇区编号升序逆时针形成一个圆（请参见第一个示例）。


/**
 * @param {number} n
 * @param {number[]} rounds
 * @return {number[]}
 */
var mostVisited = function (n, rounds) {
  let m = rounds.length
  let list = new Array(n + 1).fill(0)
  list[rounds[0]]++
  for (let i = 1; i < m; i++) {
    let start = rounds[i - 1], end = rounds[i]
    if (start >= end) {
      end += n
    }
    start++
    while (start <= end) {
      let index = start > n ? start - n : start
      list[index]++
      start++
    }
  }
  let max = 1
  let ret = []
  for (let i = 1; i < n + 1; i++) {
    if(list[i] > max){
      max = list[i]
      ret = [i]
    }else if(list[i] === max){
      ret.push(i)
    }
  }
  return ret
};
var n = 7, rounds = [1, 3, 5, 7]
console.log(mostVisited(n, rounds))
